<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Calico: AprilTags::Quad Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    extensions: ["tex2jax.js"],
    jax: ["input/TeX","output/HTML-CSS"],
});
</script>
<script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">Calico
   </div>
   <div id="projectbrief">A visual-inertial calibration library designed for rapid problem construction and debugging.</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="namespaceAprilTags.html">AprilTags</a></li><li class="navelem"><a class="el" href="classAprilTags_1_1Quad.html">Quad</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
<a href="#pub-attribs">Public Attributes</a> &#124;
<a href="#pub-static-attribs">Static Public Attributes</a> &#124;
<a href="classAprilTags_1_1Quad-members.html">List of all members</a>  </div>
  <div class="headertitle">
<div class="title">AprilTags::Quad Class Reference</div>  </div>
</div><!--header-->
<div class="contents">

<p>Represents four segments that form a loop, and might be a tag.  
 <a href="classAprilTags_1_1Quad.html#details">More...</a></p>

<p><code>#include &lt;<a class="el" href="Quad_8h_source.html">Quad.h</a>&gt;</code></p>
<div class="dynheader">
Collaboration diagram for AprilTags::Quad:</div>
<div class="dyncontent">
<div class="center"><img src="classAprilTags_1_1Quad__coll__graph.png" border="0" usemap="#aAprilTags_1_1Quad_coll__map" alt="Collaboration graph"/></div>
<map name="aAprilTags_1_1Quad_coll__map" id="aAprilTags_1_1Quad_coll__map">
<area shape="rect" title="Represents four segments that form a loop, and might be a tag." alt="" coords="5,95,120,121"/>
<area shape="rect" href="classHomography33.html" title="Compute 3x3 homography using Direct Linear Transform." alt="" coords="8,5,117,32"/>
</map>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a61dcb0ff81a8e56a46f8ec8c690c4b15"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classAprilTags_1_1Quad.html#a61dcb0ff81a8e56a46f8ec8c690c4b15">Quad</a> (const std::vector&lt; std::pair&lt; float, float &gt; &gt; &amp;p, const std::pair&lt; float, float &gt; &amp;opticalCenter)</td></tr>
<tr class="memdesc:a61dcb0ff81a8e56a46f8ec8c690c4b15"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor.  <a href="classAprilTags_1_1Quad.html#a61dcb0ff81a8e56a46f8ec8c690c4b15">More...</a><br /></td></tr>
<tr class="separator:a61dcb0ff81a8e56a46f8ec8c690c4b15"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af8724a12f12daee93579bae28d4109e0"><td class="memItemLeft" align="right" valign="top"><a id="af8724a12f12daee93579bae28d4109e0"></a>
std::pair&lt; float, float &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classAprilTags_1_1Quad.html#af8724a12f12daee93579bae28d4109e0">interpolate</a> (float x, float y)</td></tr>
<tr class="memdesc:af8724a12f12daee93579bae28d4109e0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Interpolate given that the lower left corner of the lower left cell is at (-1,-1) and the upper right corner of the upper right cell is at (1,1). <br /></td></tr>
<tr class="separator:af8724a12f12daee93579bae28d4109e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8e893f004aee7447396d1939e1a87648"><td class="memItemLeft" align="right" valign="top"><a id="a8e893f004aee7447396d1939e1a87648"></a>
std::pair&lt; float, float &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classAprilTags_1_1Quad.html#a8e893f004aee7447396d1939e1a87648">interpolate01</a> (float x, float y)</td></tr>
<tr class="memdesc:a8e893f004aee7447396d1939e1a87648"><td class="mdescLeft">&#160;</td><td class="mdescRight">Same as interpolate, except that the coordinates are interpreted between 0 and 1, instead of -1 and 1. <br /></td></tr>
<tr class="separator:a8e893f004aee7447396d1939e1a87648"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
Static Public Member Functions</h2></td></tr>
<tr class="memitem:af94d37c4ebc2280dcfc37b53cd7afb92"><td class="memItemLeft" align="right" valign="top"><a id="af94d37c4ebc2280dcfc37b53cd7afb92"></a>
static void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classAprilTags_1_1Quad.html#af94d37c4ebc2280dcfc37b53cd7afb92">search</a> (const <a class="el" href="classAprilTags_1_1FloatImage.html">FloatImage</a> &amp;fImage, std::vector&lt; <a class="el" href="classAprilTags_1_1Segment.html">Segment</a> * &gt; &amp;path, <a class="el" href="classAprilTags_1_1Segment.html">Segment</a> &amp;parent, int depth, std::vector&lt; <a class="el" href="classAprilTags_1_1Quad.html">Quad</a> &gt; &amp;quads, const std::pair&lt; float, float &gt; &amp;opticalCenter)</td></tr>
<tr class="memdesc:af94d37c4ebc2280dcfc37b53cd7afb92"><td class="mdescLeft">&#160;</td><td class="mdescRight">Searches through a vector of Segments to form Quads. <br /></td></tr>
<tr class="separator:af94d37c4ebc2280dcfc37b53cd7afb92"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
Public Attributes</h2></td></tr>
<tr class="memitem:a9ef5047c264772f2a3a44f8fd0a18363"><td class="memItemLeft" align="right" valign="top"><a id="a9ef5047c264772f2a3a44f8fd0a18363"></a>
std::vector&lt; std::pair&lt; float, float &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classAprilTags_1_1Quad.html#a9ef5047c264772f2a3a44f8fd0a18363">quadPoints</a></td></tr>
<tr class="memdesc:a9ef5047c264772f2a3a44f8fd0a18363"><td class="mdescLeft">&#160;</td><td class="mdescRight">Points for the quad (in pixel coordinates), in counter clockwise order. These points are the intersections of segments. <br /></td></tr>
<tr class="separator:a9ef5047c264772f2a3a44f8fd0a18363"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afa06de3d6ae8bf4bb670f2b7f8ec4f5f"><td class="memItemLeft" align="right" valign="top"><a id="afa06de3d6ae8bf4bb670f2b7f8ec4f5f"></a>
std::vector&lt; <a class="el" href="classAprilTags_1_1Segment.html">Segment</a> * &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classAprilTags_1_1Quad.html#afa06de3d6ae8bf4bb670f2b7f8ec4f5f">segments</a></td></tr>
<tr class="memdesc:afa06de3d6ae8bf4bb670f2b7f8ec4f5f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Segments composing this quad. <br /></td></tr>
<tr class="separator:afa06de3d6ae8bf4bb670f2b7f8ec4f5f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a26b948b98fdede39e373fabcc3214b7a"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classAprilTags_1_1Quad.html#a26b948b98fdede39e373fabcc3214b7a">observedPerimeter</a></td></tr>
<tr class="memdesc:a26b948b98fdede39e373fabcc3214b7a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Total length (in pixels) of the actual perimeter observed for the quad.  <a href="classAprilTags_1_1Quad.html#a26b948b98fdede39e373fabcc3214b7a">More...</a><br /></td></tr>
<tr class="separator:a26b948b98fdede39e373fabcc3214b7a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3b6590252139460f985375c1a843b94f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classHomography33.html">Homography33</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classAprilTags_1_1Quad.html#a3b6590252139460f985375c1a843b94f">homography</a></td></tr>
<tr class="memdesc:a3b6590252139460f985375c1a843b94f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Given that the whole quad spans from (0,0) to (1,1) in "quad space", compute the pixel coordinates for a given point within that quad.  <a href="classAprilTags_1_1Quad.html#a3b6590252139460f985375c1a843b94f">More...</a><br /></td></tr>
<tr class="separator:a3b6590252139460f985375c1a843b94f"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
Static Public Attributes</h2></td></tr>
<tr class="memitem:ae5473d956218448be77f6997796b1ea8"><td class="memItemLeft" align="right" valign="top"><a id="ae5473d956218448be77f6997796b1ea8"></a>
static const int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classAprilTags_1_1Quad.html#ae5473d956218448be77f6997796b1ea8">minimumEdgeLength</a> = 6</td></tr>
<tr class="memdesc:ae5473d956218448be77f6997796b1ea8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Minimum size of a tag (in pixels) as measured along edges and diagonals. <br /></td></tr>
<tr class="separator:ae5473d956218448be77f6997796b1ea8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afeec819e242367c2c400e2c027db0574"><td class="memItemLeft" align="right" valign="top"><a id="afeec819e242367c2c400e2c027db0574"></a>
static float const&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classAprilTags_1_1Quad.html#afeec819e242367c2c400e2c027db0574">maxQuadAspectRatio</a> = 32</td></tr>
<tr class="memdesc:afeec819e242367c2c400e2c027db0574"><td class="mdescLeft">&#160;</td><td class="mdescRight">Early pruning of quads with insane ratios. <br /></td></tr>
<tr class="separator:afeec819e242367c2c400e2c027db0574"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Represents four segments that form a loop, and might be a tag. </p>
</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="a61dcb0ff81a8e56a46f8ec8c690c4b15"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a61dcb0ff81a8e56a46f8ec8c690c4b15">&#9670;&nbsp;</a></span>Quad()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">AprilTags::Quad::Quad </td>
          <td>(</td>
          <td class="paramtype">const std::vector&lt; std::pair&lt; float, float &gt; &gt; &amp;&#160;</td>
          <td class="paramname"><em>p</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::pair&lt; float, float &gt; &amp;&#160;</td>
          <td class="paramname"><em>opticalCenter</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Constructor. </p>
<p>(x,y) are the optical center of the camera, which is needed to correctly compute the homography. </p>

</div>
</div>
<h2 class="groupheader">Member Data Documentation</h2>
<a id="a3b6590252139460f985375c1a843b94f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3b6590252139460f985375c1a843b94f">&#9670;&nbsp;</a></span>homography</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classHomography33.html">Homography33</a> AprilTags::Quad::homography</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Given that the whole quad spans from (0,0) to (1,1) in "quad space", compute the pixel coordinates for a given point within that quad. </p>
<p>Note that for most of the <a class="el" href="classAprilTags_1_1Quad.html" title="Represents four segments that form a loop, and might be a tag.">Quad</a>'s existence, we will not know the correct orientation of the tag. </p>

</div>
</div>
<a id="a26b948b98fdede39e373fabcc3214b7a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a26b948b98fdede39e373fabcc3214b7a">&#9670;&nbsp;</a></span>observedPerimeter</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">float AprilTags::Quad::observedPerimeter</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Total length (in pixels) of the actual perimeter observed for the quad. </p>
<p>This is in contrast to the geometric perimeter, some of which may not have been directly observed but rather inferred by intersecting segments. Quads with more observed perimeter are preferred over others. </p>

</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li>calico/third_party/apriltags/apriltags/<a class="el" href="Quad_8h_source.html">Quad.h</a></li>
<li>calico/third_party/apriltags/src/Quad.cc</li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
</small></address>
</body>
</html>
